 
import pymysql
# 建立一个简单的数据库操作类
class SimpleMySqlClass:
    # 函数要对数据库进行连接，并建立一个游标为操作数据库做准备
    def __init__(self, host, db_name, user, password):
        self.host = host
        self.db_name = db_name
        self.user = user
        self.password = password
        # self.port = port
        # 调用函数create_connection()对数据库进行连接
        self.connection = self.create_connection()
        # 调用函数create_cursor()生成一个游标，为操作数据库做好准备
        self.cursor = self.create_curour()
    # 建立一个数据库连接
    def create_connection(self):
        # pymysql在1.0以后的版本需要这样写
        self.connection = pymysql.connect(host=self.host, database=self.db_name,user=self.user, password=self.password)
        return self.connection
    # 建立一个游标
    def create_curour(self):
        # 通过数据库连接建立一个操作游标
        self.cursor =self.connection.cursor()
        return self.cursor
    # 执行查询
    def query_sql(self,sql):
        try:
            # 执行查询语句
            self.cursor.execute(sql)
            # 利用游标的fetchall()函数取得查询到的所有记录
            data = self.cursor.fetchall()
            # 返回记录
            return data
        except Exception:
            # 发生错误时返回有错误的SQL语句
            raise Exception('执行的SQL语句： '+sql+',出现异常，请检查')
    # 执行增、删、改相关SQL语句
    def execute(self,sql):
        try:
            # 执行增、删、改SQL语句时，返回的值是操作结果影响的记录数
            re = self.cursor.execute(sql)
            # 提交执行事务
            self.connection.commit()
            return re
        except Exception:
            # 发生错误回滚事务
            self.connection.rollback()
            # 返回-1提示执行出错
            return -1
    #     # 列出数据库中的表
    def list_tables(self):
        sql_1 = "show tables"
        try:
            self.cursor.execute(sql_1)
            table_list = self.cursor.fetchall()
            return table_list
        except Exception:
            raise Exception('执行的SQL语句：'+ sql_1 +',出现异常，请检查！')
    # 关闭连接，执行完相关的数据库操作，及时关闭连接是良好的编程习惯
    def close(self):
        self.connection.close()
 
 
# 主函数main对类进行测试
if __name__ == "__main__":
    # 对类实例化
    host = '192.168.1.32'
    mysql_obj = SimpleMySqlClass(host, 'test_db', 'root', '123')
    # 有一个数据库名字是test_db，该数据库下有一张表user_info
    # 调用类中的函数query_sql执行查询语句
    re = mysql_obj.query_sql('select * from user_info')
    # print(re) # 打印结果：(('xiaoxiao', 1), ('xiaoA', 2), ('xiaoB', 3), ('xiaoC', 4), ('xiaoD', 5))
    """
    row的打印结果：
    ('anle', 1)
    ('xiaoA', 2)
    ('xiaoB', 3)
    ('xiaoC', 4)
    ('xiaoD', 5)
    """
    for row in re:
        print("序号:",row[1],"姓名:",row[0])
 
    # 执行增删改的SQL语句
    add_count = mysql_obj.execute('insert into user_info values("xiaoE",6)')
    if add_count:
        print('添加成功')
    else:
        print("添加失败")
 
    del_count = mysql_obj.execute('delete from user_info where name = "xiaoE"')
    if del_count:
        print("删除成功")
    else:
        print("删除失败")
 
    # 列举数据库中的表：
    table_names = mysql_obj.list_tables()  # 打印table_names是一个元组，(('user',), ('user_info',))
    # print(table_names)
    for table in table_names:
        print(table[0])
    # 关闭数据库连接，节省计算机资源
    mysql_obj.close()